import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

import java.awt.Image;

import java.awt.LayoutManager;

public class ZeichenPanel extends JPanel  {

    Fenster fenster;

    Image[] bilderFiguren;
    Image[] bilderHintergrund;

    int tileBreite;
    int tileHoehe;

    int zeilenzahl;
    int spaltenzahl;

    public ZeichenPanel(LayoutManager layout, boolean isDoubleBuffered, Fenster f) {
        super(layout, isDoubleBuffered);

        MouseConnection mouse = new MouseConnection(this);
        this.addMouseListener(mouse);
        this.addMouseMotionListener(mouse);
        this.fenster = f;

    }

    public void bilderInitialisieren(int tileBreite, int tileHoehe) {
        this.tileBreite = tileBreite; //von MouseConnection benutzt
        this.tileHoehe = tileHoehe; //von MouseConnection benutzt

        zeilenzahl = this.getHeight()/tileHoehe;
        spaltenzahl = this.getWidth()/tileBreite;

        bilderHintergrund = new Image[spaltenzahl*zeilenzahl];
        bilderFiguren = new Image[spaltenzahl*zeilenzahl];

    }

    /**
     * Diese Methode wird vom Betriebssystem aufgerufen, wenn es es fuer noeitg haelt.
     * Sie zeichnet alle Objekte auf das JPanel. Vorherige Elemente werden nicht geloescht,
     * es sei denn, man schreibt sich z.B. eine Methode dafuer.
     * 
     * Diese Methode soll schnell ausgefuehrt werden koennen, also keine grossen Berechnungen
     * darin anstellen!
     */
    public void paintComponent(Graphics g) {
        //         leinwandLoeschen(g);
        for (int x=0; x<spaltenzahl; x++) {
            for (int y=0; y<zeilenzahl; y++) {
                g.drawImage(bilderHintergrund[y*spaltenzahl+x],x*tileBreite,y*tileHoehe,null) ;
                g.drawImage(bilderFiguren[y*spaltenzahl+x],x*tileBreite,y*tileHoehe,null) ;
            }
        }
    }

    /**
     * Hilfsmethode zum Loeschen einer Zeichenflaeche.
     */
    void leinwandLoeschen(Graphics g) {
        //         g.setColor(getBackground());
        g.setColor(Color.pink);
        //          g.setColor(g.getColor());
        g.clearRect(0, 0, getWidth(), getHeight());
        //         g.setColor(Color.pink);
        //         repaint();
    }

    void einheitSetzen(int x, int y, String bildname) {
        bilderFiguren [y*spaltenzahl+x] = GraphicsHelper.createImage(bildname);
    }

    void objektSetzen(int x, int y, String bildname) {
        bilderHintergrund [y*spaltenzahl+x] = GraphicsHelper.createImage(bildname);
        //         repaint();
    }

    void fensterSetzen(Fenster f) {
        this.fenster = f;
    }

}